﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using LayerEntity.Hotel;
using LayerLogic.Almacen;
using LayerEntity.Almacen;
using LayerLogic;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
namespace System2012.Almacen
{
    public partial class frmAlmacen : DevExpress.XtraEditors.XtraForm
    {
        /// <summary>
        /// Indica si estamos editanado o creando uno Nuevo
        /// 0: Nuevo Documento
        /// 1: Editando y Guardando
        /// </summary>
        int operacion = 0;
        /// <summary>
        /// metodos y funciones globales de ayuda del sistema
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        GUtil util = new GUtil();
        /// <summary>
        /// 
        /// </summary>
        DataTable dtbALm= new DataTable ();


        public frmAlmacen()
        {
            InitializeComponent();
            RecControles(this);
        }
        #region Desplazamientos
        private void PresionadoTeclas(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Down)
            {
                if (sender == txtId)
                {
                    this.txtNombre.Focus();
                }
                if (sender == txtNombre)
                {
                    this.cmbEmpresa.Focus();
                }
                
                if (sender == txtIdUbigeo)
                {
                    this.txtDireccion.Focus();
                }
                if (sender == txtDireccion)
                {
                    this.txtIdEncargado.Focus();
                }
                if (sender == txtIdEncargado)
                {
                    this.cmbEstado.Focus();
                }
                
            }
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Right)
            {
                if (sender == cmbEmpresa)
                {
                    this.cmbSucursal.Focus();
                }
                if (sender == cmbSucursal)
                {
                    this.txtIdUbigeo.Focus();
                }
                if (sender == cmbEstado)
                {
                    this.chkPrincial.Focus();
                }
            }
            if (e.KeyCode == Keys.Up)
            {
                if (sender ==txtNombre )
                {
                    this.txtId.Focus();
                }
                
                if (sender ==txtIdUbigeo )
                {
                    this.cmbSucursal.Focus();
                }
                if (sender ==txtDireccion )
                {
                    this.txtIdUbigeo.Focus();
                }
                if (sender ==txtIdEncargado )
                {
                    this.txtDireccion.Focus();
                }
                
                if (sender ==chkPrincial )
                {
                    this.cmbEstado.Focus();
                }
            }
            if (e.KeyCode == Keys.Left)
            {
                if (sender == cmbEmpresa)
                {
                    this.txtNombre.Focus();
                }
                if (sender == cmbSucursal)
                {
                    this.cmbEmpresa.Focus();
                }
                if (sender == cmbEstado)
                {
                    this.txtIdEncargado.Focus();
                }
                if (sender == txtEncargado)
                {
                    this.txtIdEncargado.Focus();
                }
            }
        }
        public void RecControles(Control control)
        {
            //Recorremos con un ciclo for each cada control que hay en la colección Controls
            foreach (Control contHijo in control.Controls)
            {
                //Preguntamos si el control tiene uno o mas controles dentro del mismo con la propiedad 'HasChildren'
                //Si el control tiene 1 o más controles, entonces llamamos al procedimiento de forma recursiva, para que siga recorriendo los demás controles 
                if (contHijo.HasChildren) this.RecControles(contHijo);
                //Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
                // Asignamos el Evento para los desplazamientos de los controles
                contHijo.KeyDown += new KeyEventHandler(PresionadoTeclas);
            }
        }

        #endregion
        #region METODOS
        private void NuevoAlmacen()
        {
            txtNombre.Focus();
            this.operacion = 0;
            this.txtId.Text = "0";
            this.txtNombre.Text = "";
            this.txtIdUbigeo.Text = "";
            this.txtUbigeo.Text = "";
            this.txtDireccion.Text = "";
            this.txtIdEncargado.Text = "";
            this.txtEncargado.Text = "";
           // this.cmbEmpresa.EditValue = null;
            if (!BGWEmpresa.IsBusy) BGWEmpresa.RunWorkerAsync();
            this.cmbEstado.EditValue = null;
        }
        private void Grabar()
        {
            LAlmacen objAl = new LAlmacen();
            EAlmacen objEl = new EAlmacen();
            objEl.Id_Almacen = int.Parse(this.txtId.Text);
            objEl.Des_almacen = this.txtNombre.Text;
            objEl.Direccion = this.txtDireccion.Text;
            objEl.Ubigeo = this.txtIdUbigeo.Text;
            objEl.IdUsuario = "";
            objEl.Id_Persona = null;
            objEl.Id_Sucursal = int.Parse(this.cmbSucursal.EditValue.ToString());
            objEl.Id_Estado = int.Parse(this.cmbEstado.EditValue.ToString());
            objEl.Is_Principal = this.chkPrincial.Checked ? 1 : 0; 
            string resultado = System2012.SystemUtils.RecordmanagerAlmacen.MantenimientoAlmacenes(objEl, this.operacion == 0 ? EnumOperaciones.Insertar : EnumOperaciones.Actualizar);
            if (resultado == "0")
            {
                XtraMessageBox.Show(this, "PROCESO EFECTUADO CON EXITO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.None);
            }
            else
            {
                if (resultado == "-1")
                {
                    XtraMessageBox.Show(this, "INCONSISTENCIA INESPERADA \n NO SE REALIZO NINGUNA OPERACIÓN", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (resultado == "-2")
                    {
                        XtraMessageBox.Show(this, "EL NOMBRE DEL ALMACEN  YA EXISTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (resultado == "-3")
                        {
                            XtraMessageBox.Show(this, "SELECCIONE CORRECTAMENTE LA SUCURSAL", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            if (resultado == "-4")
                            {
                                XtraMessageBox.Show(this, "INCONSISTENCIA INESPERADA \n NO SE REALIZO NINGUNA CTUALIZACION", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            else
                            {
                                if (resultado == "5")
                                {
                                    XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUN REGISTRO\n PARA REALIAR ESTE\n PROCESO INTENTE NUEVAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);

                                }
                                else
                                {
                                    XtraMessageBox.Show(this, resultado);
                                }
                            }
                        }
                    }
                }
            }
            if (!BGWAlmacen.IsBusy) BGWAlmacen.RunWorkerAsync();
        }
        private void Editar(int index)
        {
            this.txtId.Text =dtbALm.Rows[index]["id_almacen"].ToString();
             this.txtNombre.Text =dtbALm.Rows[index]["des_almacen"].ToString();
             this.txtDireccion.Text =dtbALm.Rows[index]["direccion"].ToString();
             this.cmbEstado.EditValue= int.Parse(dtbALm.Rows[index]["id_estado"].ToString());
             this.cmbEmpresa.EditValue =int.Parse(dtbALm.Rows[index]["id_empresa"].ToString());
             this.cmbSucursal.EditValue = int.Parse(dtbALm.Rows[index]["id_hotel"].ToString());
             this.txtIdUbigeo.Text =dtbALm.Rows[index]["ubigeo"].ToString();
             //this.txtId.Text =dtbALm.Rows[index]["id_responsable"].ToString();
             this.txtUbigeo.Text =dtbALm.Rows[index]["nom_ubigeo"].ToString();
             this.chkPrincial.Checked =int.Parse( dtbALm.Rows[0]["is_principal"].ToString()) ==1 ? true : false;
             this.operacion = 1;
           
        }
        private bool Validar()
        {
            bool res = false;
            if (this.txtNombre.Text == string.Empty)
            {
                res = false;
                XtraMessageBox.Show(this, "DEBE  INGRESAR EL NOMBRE DEL ALMACEN", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNombre.Focus();
                txtNombre.SelectAll();
            }
            else
            {
                if (this.txtUbigeo.Text == string.Empty)
                {
                    res = false;
                    XtraMessageBox.Show(this, "DEBE DE SELECCIONAR EL UBIGEO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtUbigeo.Focus();
                    txtUbigeo.SelectAll();
                }
                else
                {
                    if (this.txtDireccion.Text == string.Empty)
                    {
                        res = false;
                        XtraMessageBox.Show(this, "DEBE  INGRESAR LA DIRECCION DEL ALMACEN", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtDireccion.Focus();
                        txtDireccion.SelectAll();
                    }
                    else
                    {
                        if (this.txtIdEncargado.Text == string.Empty)
                        {
                            res = false;
                            XtraMessageBox.Show(this, "DEBE DE INGRESAR EL ENCARGADO DEL ALMACEN", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            txtIdEncargado.Focus();
                            txtIdEncargado.SelectAll();
                        }
                        else
                        {
                            if (this.cmbEmpresa.ItemIndex == -1)
                            {
                                res = false;
                                XtraMessageBox.Show(this, "SELECCIONE A LA EMPRESA QUE PERTENECE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                cmbEmpresa.Focus();
                                cmbEmpresa.SelectAll();
                            }
                            else
                            {
                                if (this.cmbSucursal.ItemIndex == -1)
                                {
                                    res = false;
                                    XtraMessageBox.Show(this, "DEBE DE SELECCIONAR A LA SUCRUSAL QUE PERTENECE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    cmbSucursal.Focus();
                                    cmbSucursal.SelectAll();
                                }
                                else
                                {
                                    if (this.cmbEstado.ItemIndex == -1)
                                    {
                                        res = false;
                                        XtraMessageBox.Show(this, "DEBE DE SELECCIONAR EL ESTADO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        cmbEstado.Focus();
                                        cmbEstado.SelectAll();
                                    }
                                    else
                                    {
                                        res = true;
                                    }
                                }
                            }
                        }
                    }

                }
            }
            return res;

        }
        #endregion

        private void BGWEmpresa_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetEmpresas();
        }

        private void BGWEmpresa_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbEmpresa.Properties.DataSource = e.Result;
        }

        private void frmAlmacen_Load(object sender, EventArgs e)
        {/*
            this.gridView1.OptionsView.ColumnAutoWidth = false;
            this.gridView1.ScrollStyle = ScrollStyleFlags.LiveHorzScroll | ScrollStyleFlags.LiveVertScroll;
            this.gridView1.HorzScrollVisibility = ScrollVisibility.Always;*/
            if (!BGWAlmacen.IsBusy) BGWAlmacen.RunWorkerAsync();
           
        }

        private void BGWSucursal_DoWork(object sender, DoWorkEventArgs e)
        {
            EHotel obj = new EHotel();
            obj.Condicion = "where id_empresa="+this.cmbEmpresa.EditValue.ToString();
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetListaSucursal(obj);
        }

        private void BGWSucursal_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbSucursal.Properties.DataSource = e.Result;
            if (!BGWEstado.IsBusy) BGWEstado.RunWorkerAsync();

        }

        private void cmbEmpresa_EditValueChanged(object sender, EventArgs e)
        {
            if (!BGWSucursal.IsBusy) BGWSucursal.RunWorkerAsync();
        }

        private void BGWEstado_DoWork(object sender, DoWorkEventArgs e)
        {
            this.BGWEstado.ReportProgress(30, "Cargando Estado");
            e.Result = SystemUtils.RecordManagerCommonList.GetEstados();
            this.BGWEstado.ReportProgress(100, "Completado");
        }

        private void BGWEstado_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbEstado.Properties.DataSource = e.Result;
        }

        private void txtIdUbigeo_KeyDown(object sender, KeyEventArgs e)
        {

        }

        private void txtIdUbigeo_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
            {
                System2012.Sistema.Ubigeos.BuscarUbigeo b = new System2012.Sistema.Ubigeos.BuscarUbigeo();
                b.ShowDialog();
                if (b.StateSelection)
                {
                    this.txtUbigeo.Text = b.UbigeoSelected.ToString();
                    this.txtIdUbigeo.Text = b.UbigeoSelected.Ubigeo;


                }
            }
        }

        private void txtIdEncargado_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
            {
                Listados.frmListadoPersona F = new Listados.frmListadoPersona();
                F.ShowDialog();
            }
        }

        private void barManager1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if ((string)e.Item.Tag == "Nuevo")
            {
                this.NuevoAlmacen();

            }
            if ((string)e.Item.Tag == "Grabar")
            {
                if (Validar() == true)
                {
                    this.Grabar();
                }
            }
        }

        private void BGWAlmacen_DoWork(object sender, DoWorkEventArgs e)
        {
            EAlmacen objAl = new EAlmacen();
            objAl.Condicion = "";
            e.Result = System2012.SystemUtils.RecordmanagerAlmacen.GetListaAlamcen(objAl);
        }

        private void BGWAlmacen_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            dtbALm=(DataTable)e.Result;
            gridControl1.DataSource = e.Result;
            if (!BGWEmpresa.IsBusy) BGWEmpresa.RunWorkerAsync();
        }

        private void gridView1_RowClick(object sender, RowClickEventArgs e)
        {
            Editar(e.RowHandle);
        }

        private void frmAlmacen_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.S && (e.Control || e.Alt || e.Shift))
            {
                if (Validar() == true)
                {
                    this.Grabar();
                }
            }
            if (e.KeyCode == Keys.N && (e.Control || e.Alt || e.Shift))
            {
                this.NuevoAlmacen();
            }

            if (e.KeyCode == Keys.F && (e.Control || e.Alt || e.Shift))
            {
                this.txtFiltrar.Focus();
            }
            if (e.KeyCode == Keys.B && (e.Control || e.Alt || e.Shift))
            {
                this.txtFiltrar.Focus();
            }
            if (e.KeyCode == Keys.W && (e.Control || e.Alt || e.Shift))
            {
                this.Close();
            }

            if (e.KeyCode == Keys.Escape)
            {
                this.Close();
            }

        }

        private void barManager1_ShortcutItemClick(object sender, DevExpress.XtraBars.ShortcutItemClickEventArgs e)
        {
            if (e.Shortcut.Key == Keys.F5)
            {
                MessageBox.Show("ok");
            }
        }
    }
}